package io;

import java.io.FileOutputStream;
import java.io.IOException;

public class FOSDemo {
    public static void main(String[] args) throws IOException {
        /*
            FileOutputStream的常用构造器:
            FileOutputStream(String filename)
            FileOutputStream(File file)

            文件流输出流在创建时，如果指定的路径下对应的文件不存在时
            如果该文件所在的目录存在则会自动将该文件创建出来。

            如果该文件所在的目录不存在则会直接抛出异常:
            java.io.FileNotFoundException: .\abc\fos.dat (系统找不到指定的路径。)
         */
        //当前项目目录下没有abc目录，因此创建文件流时会报错
//        FileOutputStream fos = new FileOutputStream("./abc/fos.dat");
        //如果fos.dat不存在，则会在当前项目目录下自动创建
        FileOutputStream fos=new FileOutputStream("./fos.dat");
//        File file = new File("./fos.dat");
//        FileOutputStream fos = new FileOutputStream(file);

        //write方法只写一个字节，就是二进制的低8位
        /*
            字节输出流的超类:OutputStream上定义了写出字节的相关方法

            void write(int d)
            通过当前流向连接的位置写出1个字节，写出的是给定的int值对应的2进制的"低八位"

            十进制(逢十进一):0-9  比9大1的数字没法表达，因此只能个位回0，向前进位:10
            二进制(逢二进一):0 1  比1大1的数字没法表达，因此只能个位回0，向前进位:10

         0000           0
         0001           1
         0010           2
         0011           3
         0100           4
         0101           5
         0110           6
         0111           7
         1000           8
         1001           9
         1010           10



         当第一次调用:
         fos.write(1)

         参数:整数int型1的2进制:
         00000000 00000000 00000000 00000001
                                    ^^^^^^^^
                                    写出的字节

         因此，方法调用完毕后，fos.dat文件中就有了1个字节，内容是:
         00000001
         */
        fos.write(1);//int 1对应的二进制位00000000 00000000 00000000 00000001
        /*
            第二次调用：
            fos.write(2)
            整数2的2进制:
            00000000 00000000 00000000 00000010
                                       ^^^^^^^^
                                       写出的字节

            方法调用完毕后，fos.dat文件中的内容:
            00000001 00000010
         */
        fos.write(3);//int 3对应的二进制位00000000 00000000 00000000 00000011
        System.out.println("写出完毕！");
        fos.close();//流使用完需要关闭释放资源
    }
}
